import { msg } from './util.js'

// #ifndef H5
// 非h5端，使用测试服务器地址
let BASE_URL = ''
// #endif

// #ifdef H5
// h5端，进行代理转发，使用公网服务器地址
let BASE_URL = '/api'
// #endif

import store from '@/store'

/**
 * 封装的请求函数
 * @param {Object} options - 请求配置选项
 * @returns {Promise} 返回包含请求结果的Promise对象
 */
const request = (options = {}) => {

    //2. 判断是否有访问令牌
    // 从store中获取访问令牌
    const accessToken = store.state.accessToken
    // 如果存在访问令牌，则添加到请求头中
    if(accessToken) {
        // oauth2协议，设置Authorization请求头
        options.header = {'Authorization': `Bearer ${accessToken}` }
    }

    // 定义白名单路由，这些路由不需要登录即可访问
    // 短信验证码也要放行 h5端
    const whileList = ['/system/sms/code','/auth/login', '/auth/login/provider', '/auth/user/mobile']

   
    return new Promise((resolve, reject) => {
        // 判断是否登录，登录后才可以访问图片
        /* if(option.isLogin && !accessToken) {
            //跳转到登录页
            return uni.navigateTo({
                url: '/pages/auth/login'
            })
        } */
        // 判断请求接口url是否需要登录权限
        // 如果不在白名单内且不包含'/api/'路径且没有访问令牌，则跳转到登录页
        if( whileList.indexOf(options.url)===-1 &&
            options.url.indexOf('/api/')<0 && !accessToken) {
            //跳转到登录页
            return uni.navigateTo({
                url: '/pages/auth/login'
            })
        }

        // 调用uni.request发起网络请求
        uni.request({
            url: BASE_URL + options.url,        
            method: options.method || 'GET',      
            data: options.data || {},             
            timeout: 8000,                        
            //3. 添加请求头
            header: options.header || {},        
            success: (res) => {                   
                // console.log('res', res.data)
                resolve(res.data)                
            },
            fail: (err) => {                      
                // console.log('err', err)
                msg('请求接口失败')                
                reject(err)                       
            }
        })
    })
}

export default request
